Data consistency的問題,如果今天你的data只有被一支程式去處理、去access、去讀取的話,通常都不會有問題,就是你怎麼update它,你再慢update都沒關係,因為整個電腦架構CPU讀資料就是一層一層,它也不會跳,所以說今天只改最上層的,下次讀當然也只讀最上層的,它不會去讀後面,coherency的問題其實就不會存在。
但是其實我們的電腦系統不是只有一個人一支程式,它們都是很多在跑,而且它們很多的資料就是memory的content是share的,因為大家只要有pointer,其實你都可以去access的到,而且很多程式是故意用share的概念去執行的,就是要讓兩支程式可以看到同樣的資料,像是multi-thread programming thread的概念,它就是要share這個memory的content,所以這個時候就有問題了,或是說multi-core的processor的cache是不同,這個時候就很難解決了,所以你的程式有時候可能是跑在第一個core上面,跑一跑,換到第二個core,這時候它們看到的cache是不同的cache,你就要解決coherency的問題,所以重點就是電腦設計必須要符合程式的邏輯,就是資料應該是相同的,只是copy。
所以我們才說這個問題越擴大之後就會越複雜,到了同一台電腦很多個core或很多個程式,到了分散式系統是根本是不同的電腦,雖然是不同memory,可是我們把它串在一起的目的就是讓它們以為是同樣的memory,所以這時候問題就越來越大,因為到了分散式系統還要考慮網路的問題,網路隨時會斷線,在電腦的memory bus不會斷,可是分散式系統因為跨網路,網路是不穩定的,所以這個時候你仍然要考慮怎麼樣讓這個電腦系統可以正常運作,確保consistency。
像Google做這些分散式系統或是雲端計算,為什麼可以長到這麼大?電腦系統還可以運作?他們後來的選擇是放棄consistency,因為它有些應用是不care的,就像大家在看網頁,你看到我看到的真的一樣嗎?一定不一樣,同樣網址打下去各種版本跑出來,為什麼?因為其實也不影響使用者,所以他們為了可以讓系統可以長到很大,他們最後決定就是放棄consistency,因為其實對於使用者而言那不是重要的事情,因為如果你要保證這個,你就要很多的溝通,所以一台電腦改,你要告訴所有人都要改,如果你要告訴一萬個人,那一定是沒有辦法很快的,所以這個就是consistency,一個很大的issue。